package com.erp.erp_ui.warehouse.controller;

import com.alibaba.fastjson.JSONObject;
import com.erp.erp_entitys.User.UserEntity;
import com.erp.erp_entitys.warehouse.req.InitStatisticsInfoReq;
import com.erp.erp_ui.base.Base;
import com.erp.erp_ui.money.req.OperationReq;
import com.erp.erp_ui.warehouse.req.*;
import com.erp.erp_ui.warehouse.service.InitStockService;
import com.erp.erp_ui.warehouse.vo.InitProductInfoVo;
import com.erp.erp_ui.warehouse.vo.InitStatisticsInfoVo;
import com.erp.erp_ui.warehouse.vo.InitStockPageListVo;
import com.erp.erp_ui.warehouse.vo.InitStockUpdateOrDetailVo;
import com.erp.utils.R;
import com.erp.utils.ResultStatusEnum;
import com.github.pagehelper.PageInfo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @ClassName : InitStockController
 * @Description : 初始化库存控制层
 * @Author : lst
 * @Date: 2020-07-22 13:45
 */
@Controller
@RequestMapping(value = "initStock")
public class InitStockController extends Base {

    /**
     * 日志
     */
    private static final Logger LOGGER = LoggerFactory.getLogger(InitStockController.class);

    /**
     * 初始化库存业务逻辑层
     */
    private final InitStockService initStockService;

    @Autowired
    public InitStockController(InitStockService initStockService) {
        this.initStockService = initStockService;
    }


    /**
     * 首页-获取分页信息
     * @param req 查询条件实体
     * @return
     */
    @GetMapping("/getListByPage")
    @ResponseBody
    public R getListByPage(InitStockPageListReq req){
        try {
            LOGGER.info("初始化-首页-获取分页信息:" + req.toString());
            PageInfo<InitStockPageListVo> pageInfo = initStockService.getListByPage(req);
            return R.build(0,"", pageInfo.getTotal(), pageInfo.getList());
        }catch (Exception e){
            LOGGER.info("初始化-首页-获取分页信息异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }



    /**
     * 仓库管理-初始化-获取产品信息
     * @param req 查询条件
     * @return 产品集合
     */
    @GetMapping("/add/getProductInfoByPage")
    @ResponseBody
    public R getProductInfoByPage(InitProductInfoReq req){
        try {
            LOGGER.info("仓库管理-初始化-获取产品分页信息 req =" + req.toString());
            PageInfo<InitProductInfoVo> pageInfo = initStockService.getProductInfoByPage(req);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        }catch (Exception e){
            LOGGER.info("仓库管理-初始化-获取产品分页信息异常：" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 仓库管理-初始化-获取产品信息
     * @param req 查询条件
     * @return 产品集合
     */
    @GetMapping("/add/getProductInfo")
    @ResponseBody
    public R getProductInfo(InitProductInfoReq req){
        try {
            LOGGER.info("仓库管理-初始化-获取产品信息 req =" + req.toString());
            List<InitProductInfoVo> pageInfo = initStockService.getProductInfo(req);
            return R.build(pageInfo);
        }catch (Exception e){
            LOGGER.info("仓库管理-初始化-获取产品信息异常：" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 仓库管理-初始化-新增、修改
     * @param req 新增、修改数据实体
     * @return 新增、修改结果
     */
    @PostMapping("/add")
    @ResponseBody
    public R add(@Validated @RequestBody AddInitStockReq req){
        LOGGER.info("仓库管理-初始化-新增、修改 req=" + req.toString());
        try {
            UserEntity user = (UserEntity)this.getBean("user");
            String name = user.getName();
            String code = user.getCode();
            return initStockService.add(req, name, code);
        }catch (Exception e){
            LOGGER.info("仓库管理-初始化-新增、修改异常：" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 仓库管理-初始化-查看详情、修改
     * @param id 初始化id
     * @return 详情对象
     */
    @PostMapping("/detail")
    @ResponseBody
    public R getDetailInfo(@RequestBody Integer id){
        try {
            LOGGER.info("初始化-查看详情、修改 id=" + id);
            InitStockUpdateOrDetailVo vo = initStockService.getDetailInfo(id);
            return R.build(vo);
        }catch (Exception e){
            LOGGER.info("初始化-查看详情、修改异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 初始化删除
     * @param id 初始化id
     * @param status 状态(1.草稿箱 2.待批箱 3.已批箱 4.完成箱 5.垃圾箱)
     * @return
     */
    @PostMapping("/delete")
    @ResponseBody
    public R deleteInventoryInfo(@RequestBody Integer id, @RequestBody Integer status){
        try {
            LOGGER.info("仓库管理-初始化-删除信息 id=" + id + ",status=" + status);
            initStockService.delete(id, status);
            return R.build("");
        }catch (Exception e){
            LOGGER.info("仓库管理-初始化-删除信息异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }

    }

    /**
     * 数据操作接口
     * 1.提交审批 2.审批通过 3.审批退回 4.完成 5.还原
     * @param req 操作类型
     * @return 操作结果
     */
    @PostMapping("/operation")
    @ResponseBody
    public R operation(@RequestBody OperationReq req){
        try {
            LOGGER.info("仓库管理-初始化-数据操作接口 req=" + req.toString());
            return initStockService.operation(req);
        }catch (Exception e){
            LOGGER.info("仓库管理-初始化-数据操作接口异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

    /**
     * 初始化统计--分页
     *
     * @param req 查询参数
     * @return 初始化统计分页信息
     */
    @GetMapping("/statistics/getInitStatisticsByPage")
    @ResponseBody
    public R getInitStatisticsByPage(InitStatisticsInfoReq req) {
        try {
            LOGGER.info("仓库管理-初始化-初始化统计 req=" + req.toString());
            PageInfo<InitStatisticsInfoVo> pageInfo = initStockService.getInitStatisticsByPage(req);
            return R.build(0, "", pageInfo.getTotal(), pageInfo.getList());
        } catch (Exception e) {
            LOGGER.info("仓库管理-初始化-初始化统计异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }


    /**
     * 初始化统计--导出
     *
     * @param req 查询参数
     * @return 初始化统计分页信息
     */
    @GetMapping("/export/initStatisticsExport")
    @ResponseBody
    public R initStatisticsExport(InitStatisticsInfoReq req) {
        try {
            LOGGER.info("仓库管理-初始化-初始化统计-导出 req=" + req);
            JSONObject info= initStockService.initStatisticsExport(req);
            return R.build(info);
        } catch (Exception e) {
            LOGGER.info("仓库管理-初始化-初始化统计-导出 异常:" + e);
            return R.buildError(ResultStatusEnum.SYSTEM_ERROR);
        }
    }

}
